/*
猜想1742年，哥德巴赫在教学中发现，每个不小于6的偶数都是两个素数（只能被1和它本身整除的数）之和。如6＝3＋3，14＝3＋11等等。公元1742年6月7日哥德巴赫写信给当时的大数学家欧拉，欧拉在6月30日给他的回信中说，他相信这个猜想是正确的，但他不能证明。叙述如此简单的问题，连欧拉这样首屈一指的数学家都不能证明，这个猜想便引起了许多数学家的注意。从哥德巴赫提出这个猜想至今，许多数学家都不断努力想攻克它，但都没有成功。
我们不需要你去证明哥德巴赫猜想。
如果哥德巴赫猜想是正确的，一个（不小于6的）偶数，都是两个素数之和。那么这个偶数能被至少一个素数对表示，如14，即可以表示为14＝3＋11，也可以表示为14=7+7。不同的偶数对应的素数对的数目是不一样的，如偶数6，就只能表示为6=3+3。对于每个给定的偶数，我们希望知道有多少素数对的和等于该偶数。
输入：
有多组测试数据。每组测试数据占一行，包含唯一的一个正偶数n.(6 <= n <= 1e8)

输出：
对于每个输入的偶数，输出一行包含唯一的一个整数：表示有多少个素数对的和是输入的偶数。

例子输入：
6 14
例子输出：
1
2
*/
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
#define MAX 10000001
int a[MAX + 1]; // 素数数组
int b[MAX + 1]; // 素数标记数组,0为素数，1为其他
// 使用 b[MAX + 1]={0} 进行全0初始化会超时，使用埃氏筛会超时
int num = 0;
typedef long long LL;
void xianshai() // 线性筛
{
    LL i, j;
    memset(b, 0, sizeof(b)); // 初始化为0，全为素数，全局变量默认值全为0，其实可以不初始化
    b[0] = b[1] = 1;
    // 筛选i = 2~MAX的数
    for (i = 2; i < MAX; i++)
    {
        if (b[i] == 0)
        {
            a[++num] = i;
        }
        // 筛除素数i与比自己小的素数的乘积
        for (j = 1; j <= num && i * a[j] < MAX; j++)
        {
            b[i * a[j]] = 1;
            //提前退出，防止重复筛
            if (i % a[j] == 0)
                break;
        }
    }
}
int main()
{
    int n, i, ans;
    xianshai();
    while (cin >> n)
    {
        ans = 0;
        for (i = 2; i <= n / 2; i++)
        {
            if (b[i] == 0 && b[n - i] == 0)
            {
                ans++;
                // cout << i << "+" << n - i << endl;
            }
        }
        cout << ans << endl;
    }
    return 0;
}
